package service

import (
	"fmt"
	"os"

	"github.com/fatih/color"
	"github.com/spf13/pflag"
	"github.com/spf13/viper"
)

//goland:noinspection ALL
var (
	confFileName  string
	confFiletype  = "yaml"
	confFilePaths = []string{"conf"}
)

func initConf() *Config {
	conf := viper.New()

	// 读取环境变量切换配置文件
	viperForArgs(conf)

	fmt.Printf("%v %s\n", color.GreenString("当前环境:"), conf.GetString("env"))

	ConfFileName := "app_" + conf.GetString("env")

	// 设置配置文件的搜索目录
	for _, v := range confFilePaths {
		conf.AddConfigPath(v)
	}
	// 设置配置文件的名称
	conf.SetConfigName(ConfFileName)

	// 设置配置文件的类型
	conf.SetConfigType(confFiletype)

	// 加载配置文件
	err := conf.ReadInConfig()
	if err != nil {
		fmt.Println("配置文件不存在: ", err.Error())
		os.Exit(-1)
	}

	// 解析到结构体（tag: mapstructure）
	var c Config
	_ = conf.Unmarshal(&c)
	c.App.Env = conf.GetString("env")

	return &c
}

// 获取命令行参数
func viperForArgs(conf *viper.Viper) {
	// default: --env=dev
	pflag.String("env", "dev", "Environment ： prod|test|dev ")
	pflag.Parse()
	err := conf.BindPFlags(pflag.CommandLine)
	if err != nil {
		return
	}
}
